package com.gz.springboot.lambda;

public class Test {

    public static void main(String[] args) {
        //传统方式
//        GzFunction<Desk, String> hf =new GzFunction<Desk, String>() {//匿名内部类
//            @Override
//            public String apply(Desk desk) {
//                return "hello desk";
//            }
//        };
//        String s = hf.apply(new Desk());
//        System.out.println(s);

        GzFunction<Desk, String> hf= Desk::getName;
        String apply = hf.apply(new Desk());//得到getName的值
        System.out.println(apply);
    }
}

//定义一个函数式接口:有且只有一个抽象方法的接口
//用@FunctionalInterface来标识一个函数式接口
//GzFunction是一个自定义泛型接口
@FunctionalInterface
interface GzFunction<T,R> {
    R apply(T t); //抽象方法: 根据类型T的参数获取类型R的结果

    //函数式接口依然可以有多个默认实现方法
//    default public void ok(){
//        System.out.println("ok");
//    }
}

//interface A {
//    default public void ok(){
//        System.out.println("ok");
//    }
//}

class Desk{
    private String name="gz hello";

    public String getName() {
        return name;
    }
}
